/*
 * MRolea.java
 *
 * Created on 16 de mayo de 2006, 12:23 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package ig.metrica.ui.seguridad;

import ejb.metrica.seguridad.control.LoginDTO;
import ejb.metrica.seguridad.entity.RolesDTO;
import ig.metrica.ui.PrincipalMetrica;
import ig.metrica.ui.ServiceLocator;
import ig.metrica.ui.interfaces.comunes.IModelo;
import ig.util.NoContinuaException;
import java.rmi.RemoteException;
import java.util.Collection;
import java.util.ArrayList;

/**
 *
 * @author jsanchez
 */
public class MRolea implements IModelo {
    PRoles panel=null;
    RolesDTO rolesDTO=new RolesDTO();
    LoginDTO login= new LoginDTO();
    private Collection CRolesDTO;
    /** Creates a new instance of MRolea */
    public MRolea(PRoles panel) {
        this.panel=panel;
        setLogin();
    }
    
    private void setLogin(){
        ((PrincipalMetrica)this.panel.getFrame()).setLogin(this.login);
    }
    
    public void guardar() throws NoContinuaException {
        for (Object elem : panel.getDTOs()) {
            try {                
                if(((RolesDTO)elem).getId()!=null){
                    Collection c=new ArrayList();
                    c.add(elem);
                    this.lookupCuentaUsuarioControlBean().modificar(c);
                }else{
                    this.lookupCuentaUsuarioControlBean().crear((RolesDTO)elem);
                }
            } catch (Exception ex) {
                ex.printStackTrace();
                throw new NoContinuaException(ex.getMessage());
            }
        }
    }
    
    public Collection buscar() throws NoContinuaException {
        try {
            this.CRolesDTO=this.lookupCuentaUsuarioControlBean().findAllRoles(this.login);
            return this.CRolesDTO;
        } catch (RemoteException ex) {
            throw new NoContinuaException(ex.getMessage());
        }
    }
    
    public void modificar() throws NoContinuaException {
        
    }
    
    public void nuevo() throws NoContinuaException {
        this.rolesDTO= new RolesDTO();
    }
    
    public void eliminar() throws NoContinuaException {
        try {
            if(this.rolesDTO.getId().equals(1)||this.rolesDTO.getId().equals(2)||this.rolesDTO.getId().equals(3)){
                throw new NoContinuaException("No se puede eliminar este Rol, es un rol del sistemas.");
            }else{
                Boolean respuesta=this.lookupCuentaUsuarioControlBean().eliminarRol(this.rolesDTO.getId(),login);
                if(respuesta==null){
                    throw new NoContinuaException("No se pudo eliminar el Rol, por algun problema de de sincronizaci\u00F3n.");
                }else if(respuesta==false){
                    throw new NoContinuaException("Existe una Cuenta asociada a este Rol, primero elimine tales cuentas.");
                }
            }
            
        } catch (RemoteException ex) {
            throw new NoContinuaException(ex.getMessage());
        }
    }
    
    public void salir() throws NoContinuaException {
    }
    
    public void imprimir() throws NoContinuaException {
    }
    public void setDTO(RolesDTO DTO){
        this.rolesDTO=DTO;
    }
    public Object getTO() throws NoContinuaException {
        return rolesDTO;
    }
    
    public void cancelar() throws NoContinuaException {
    }
    private ServiceLocator serviceLocator;
    private ServiceLocator getServiceLocator() {
        if (serviceLocator == null) {
            serviceLocator = new ServiceLocator();
        }
        return serviceLocator;
    }
    
    public ejb.metrica.seguridad.control.CuentaUsuarioControlRemote lookupCuentaUsuarioControlBean() throws NoContinuaException {
        try {
            return ((ejb.metrica.seguridad.control.CuentaUsuarioControlRemoteHome) getServiceLocator().getRemoteHome("CuentaUsuarioControlBean",ejb.metrica.seguridad.control.CuentaUsuarioControlRemoteHome.class)).create();
        } catch(javax.naming.NamingException ne) {
            //java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ne);
            //throw new RuntimeException(ne);
            throw new NoContinuaException("No hay conexi\u00F3n con el Servidor");
        } catch(javax.ejb.CreateException ce) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ce);
//            throw new RuntimeException(ce);
            throw new NoContinuaException("No hay conexi\u00F3n con el Servidor");
        } catch(java.rmi.RemoteException re) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,re);
//            throw new RuntimeException(re);
            throw new NoContinuaException("No hay conexi\u00F3n con el Servidor");
        }
    }
    
    LoginDTO getLogin() {
        return this.login;
    }
}
